package com.board.controller;


import cn.hutool.core.bean.BeanUtil;
import com.board.dto.ResourceDto;
import com.board.dto.RoleDto;
import com.board.entity.Resource;
import com.board.form.ResourceRoleUpdateForm;
import com.board.param.ResourceRoleUpdateParam;
import com.board.service.RoleResourceService;
import com.board.util.JwtUtil;
import com.board.util.PageInfo;
import com.board.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 小叶
 * @since 2024年04月03日
 */
@RestController
@RequestMapping("/roleResource")
@Api(tags = "角色资源接口")
public class RoleResourceController {
    @Autowired
    private RoleResourceService roleResourceService;

    /**
     * /查询所有角色拥有的对应资源
     * @param pageNum 页码
     * @param pageSize 页数
     * @return 返回查询所有角色拥有的对应资源
     */
    @GetMapping("/roleResource")
    @ApiOperation("查询所有角色拥有的资源")
    public Result roleResource(Integer pageNum, Integer pageSize){
        PageInfo<RoleDto> list= roleResourceService.roleResource(pageNum==null?1:pageNum,pageSize==null?5:pageSize);
        return Result.success("查询所有角色拥有的资源成功",list);
    }


    /**
     * 修改角色的资源
     * @param form 修改的角色id和修改后拥有地资源id集合
     * @return 返回修改后的角色资源
     */
    @PostMapping("/updateRoleResource")
    @ApiOperation("修改角色的资源")
    public Result updateRoleResource(@RequestBody ResourceRoleUpdateForm form){
        RoleDto dto = roleResourceService.updateRoleResource(BeanUtil.toBean(form, ResourceRoleUpdateParam.class));
        return Result.success("修改角色的资源成功",dto);
    }

    /**
     * /根据菜单级别查询对应的所有父菜单
     * @param level 要查询的级别
     * @return 返回查询的父菜单
     */
    @GetMapping("/level")
    @ApiOperation("查询某个级别的父菜单")
    public Result findResourceByLevel(Integer level){
        List<Resource> list=roleResourceService.findResourceByLevel(level);
        return Result.success("根据级别查询资源名称成功",list);
    }

    /**
     * /查询账号拥有的菜单
     * @param token 登录的用户token
     * @return 返回查询的菜单
     */
    @GetMapping("/findMenu")
    @ApiOperation("查询登录账号拥有的菜单权限")
    public Result findMenu(@RequestHeader String token){
        List<ResourceDto> resourceDtos=  roleResourceService.findMenu(token);
        return Result.success("查询用户拥有的菜单成功",resourceDtos);
    }

    //查询用户拥有的二级菜单下的按钮权限
    @GetMapping("/findButton")
    @ApiOperation("查询用户拥有的按钮权限")
    public Result findButton(String resourceUrl,@RequestHeader String token){
        Integer accountId = (Integer) JwtUtil.getData(token, "id");
        System.out.println(accountId);
        List<Resource> list= roleResourceService.findButton(resourceUrl,accountId);
        return Result.success("查询用户拥有的二级菜单下的按钮权限成功",list);
    }
}

